package com.sybil.ot.dao;

import com.sybil.ot.dominio.OrdenTrabajo;
import com.sybil.ot.dominio.OrdenTrabajoPK;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

@Repository("ordenTrabajoDAO")
public class OrdenTrabajoDAO extends AbstractDAO<OrdenTrabajo, OrdenTrabajoPK> {

   public OrdenTrabajoDAO() {
      super(OrdenTrabajo.class);
   }

   public OrdenTrabajo obtenerOrdenTrabajo(OrdenTrabajoPK clave) {
      return obtener(clave);
   }

   public OrdenTrabajo obtenerOrdenTrabajo(String serie, int numero) {
      return obtener(new OrdenTrabajoPK(serie, numero));
   }

   public List<OrdenTrabajo> obtenerOrdenesTrabajo() {
      Criteria c = sesionActual().createCriteria(OrdenTrabajo.class);
      c.addOrder(Order.desc("llave.numero"));
      return c.list();
   }

   public void guardarOrdenTrabajo(OrdenTrabajo ordenTrabajo) {
      guardar(ordenTrabajo);
   }

   public void editarOrdenTrabajo(OrdenTrabajo ordenTrabajo) {
      editar(ordenTrabajo);
   }

   public void eliminarOrdenTrabajo(OrdenTrabajo ordenTrabajo) {
      eliminar(ordenTrabajo);
   }

   public Integer obtenerSecuencia(String serie) {
      Integer siguiente = 0;
      Query query = sesionActual().getNamedQuery("OrdenTrabajo.maxPorSerie")
              .setString("serie", serie);
      List list = query.list();
      Object get = list.get(0);
      if (get != null) {
         siguiente = (Integer) list.get(0);
      }
      siguiente++;
      return siguiente;
   }

//   public List<OrdenTrabajo> obtenerPorZona(String claveZona) {
////      return obtener(Restrictions.like("clase", claveClase, MatchMode.START));
//      return obtener(Restrictions.eq("zona", new Zona(claveZona)));
//   }

   public List<OrdenTrabajo> obtenerOrdenesTrabajo(String numeroProveedor) {
      Criteria c = sesionActual().createCriteria(OrdenTrabajo.class, "ot");
      c.createAlias("ot.mantenimientos", "mttos");
      c.add(Restrictions.eq("mttos.proveedor.numero", numeroProveedor));
      return c.list();
   }
}
